package dao

import (
	"time"
)

// 这是 ViewSource 的全局公开dao对象，被service层调用!
var ViewSourceDao = viewSourceDao{}

// 浏览来源表
// 这是 view_source表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type ViewSource struct {
	Id        int32     `json:"id" form:"id" db:"id" v:"id"`
	ObjId     int32     `json:"obj_id" form:"obj_id" db:"obj_id" v:"obj_id"`         // 对象id,属主
	ObjType   int8      `json:"obj_type" form:"obj_type" db:"obj_type" v:"obj_type"` // 类型,0-帖子;1-博客;2-资源;3-wiki;4-项目;5-图书
	Google    int32     `json:"google" form:"google" db:"google" v:"google"`         // 来源谷歌数量
	Baidu     int32     `json:"baidu" form:"baidu" db:"baidu" v:"baidu"`             // 来源百度数量
	Bing      int32     `json:"bing" form:"bing" db:"bing" v:"bing"`                 // 来源必应数量
	SoGou     int32     `json:"so_gou" form:"so_gou" db:"so_gou" v:"so_gou"`         // 来源搜狗数量
	So        int32     `json:"so" form:"so" db:"so" v:"so"`                         // 来源360数量
	Other     int32     `json:"other" form:"other" db:"other" v:"other"`             // 其他来源数量
	UpdatedAt time.Time `json:"updated_at" form:"updated_at" db:"updated_at" v:"updated_at"`
}

// 注意:这是 ViewSource 的私有dao对象，只能在dao层内使用!
type viewSourceDao struct {
	InsertTemplate func(arg ViewSource) (int64, error)            //插入一条记录
	UpdateTemplate func(arg ViewSource) (int64, error)            //更新一条记录
	DeleteTemplate func(id int64) (int64, error)                  `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (ViewSource, error)             `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg ViewSourceList) ([]ViewSource, error) //模糊分页查询
}

/*
// 这是 view_source 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type ViewSourcePostman struct {
id
obj_id
obj_type
google
baidu
bing
so_gou
so
other
updated_at

}*/

// 这是 view_source 表的批量请求参数
type ViewSourceReq struct {
	List []ViewSource `json:"list" form:"list"`
}

// 这是 viewSourceDao.List()方法的请求参数
type ViewSourceList struct {
	Page
}
